home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1995-11-25 | 1.1 KB | 47 lines |
- IMPLEMENTATION MODULE Randomize;
-
- FROM XBIOS104 IMPORT Random;
- FROM MathBase IMPORT real;
-
- FROM SYSTEM IMPORT VAL;
-
- VAR seed1,seed2,seed3 :INTEGER;
-
- PROCEDURE random(Grenze:LONGINT):LONGINT;
- BEGIN
- RETURN ABS(VAL(LONGINT,Random())MOD Grenze);
- END random;
-
- PROCEDURE rnd(x:INTEGER):INTEGER;
- BEGIN
- x:=ABS(VAL(INTEGER,Random()) MOD x);
- RETURN x;
- END rnd;
-
- PROCEDURE RanEcu():REAL;
- (* Ein portierbarer Pseudozufallszahlengenerator für 16-BIT INTEGER
- Arithmetik nach Pierre L'Ecuyer -> ct5/94 *)
- VAR z,k:INTEGER;
- BEGIN
- k:=seed1 DIV 206;
- seed1:=157*(seed1-k*206)-k*21;
- IF seed1<0 THEN seed1:=seed1+32363;END(*IF*);
- k:=seed2 DIV 217;
- seed2:=146*(seed2-k*217)-k*45;
- IF seed2<0 THEN seed2:=seed2+31727;END(*IF*);
- k:=seed3 DIV 222;
- seed3:=142*(seed3-k*222)-k*133;
- IF seed3<0 THEN seed3:=seed3+31657; END(*IF*);
- z:=seed1-seed2;
- IF z>706 THEN z:=z-32362;END(*IF*);
- z:=z+seed3;
- IF z<1 THEN z:=z+32362; END(*IF*);
- RETURN real(z)*3.0899E-5;
- END RanEcu;
-
- BEGIN
- seed1:=rnd(32361)+1;
- seed2:=rnd(31724)+1;
- seed3:=rnd(31655)+1;
- END Randomize.
-